# 编译器选项
CXX := g++
CXXFLAGS := -std=c++17 -Wall -Wextra -Iinclude
LDFLAGS := -lpcap -lssl -lcrypto -lpthread

# 目录设置
SRC_DIR := .
INC_DIR := include
BUILD_DIR := build

# 目标可执行文件
TARGET := $(BUILD_DIR)/firewall

# 源文件列表
SRCS := $(SRC_DIR)/check.cpp \
        $(SRC_DIR)/http.cpp \
        $(SRC_DIR)/main.cpp \
        $(SRC_DIR)/TCPFilter.cpp \
        $(SRC_DIR)/WebSocketServer.cpp \
        $(SRC_DIR)/threadpool.cpp 

# 对象文件列表（放在build目录中）
OBJS := $(patsubst $(SRC_DIR)/%.cpp,$(BUILD_DIR)/%.o,$(SRCS))

# 默认目标
all: $(BUILD_DIR) $(TARGET)

# 创建build目录
$(BUILD_DIR):
	mkdir -p $(BUILD_DIR)

# 链接可执行文件
$(TARGET): $(OBJS)
	$(CXX) $(CXXFLAGS) $^ -o $@ $(LDFLAGS)

# 编译规则
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@

# 头文件依赖关系
$(BUILD_DIR)/check.o: $(INC_DIR)/check.h $(INC_DIR)/http.h
$(BUILD_DIR)/http.o: $(INC_DIR)/http.h
$(BUILD_DIR)/main.o: $(INC_DIR)/http.h $(INC_DIR)/check.h $(INC_DIR)/WebSocketServer.h
$(BUILD_DIR)/TCPFilter.o: $(INC_DIR)/TCPFilter.h
$(BUILD_DIR)/WebSocketServer.o: $(INC_DIR)/WebSocketServer.h
$(BUILD_DIR)/threadpool.o: $(INC_DIR)/threadpool.h

# 清理
clean:
	rm -rf $(BUILD_DIR)

.PHONY: all clean